/*
 * HEtiqueta.cpp - Grupo 5 - Prog. Avanzada 2011
 *
 *  Javier Dominguez - 4.901.161-6
 *  Marcelo Parada - 1.977.094-9
 *  Rodrigo Ruiz - 4.481.611-2
 *  Maximiliano Silvera - 4.106.938-6
 */

#include "HEtiqueta.h"
#include "../dao/Album.h"
#include "../dt/AlbumDT.h"
#include "../handler/HElemento.h"
#include "../dt/ArtistaDT.h"
#include "../dt/TemaDT.h"
#include "../dao/Etiqueta.h"

HEtiqueta::HEtiqueta()
{
	colEtiqueta = new ColConcrete<Etiqueta*>();
}

HEtiqueta *HEtiqueta::instance;

HEtiqueta *HEtiqueta::getInstance()
{
	if(instance == NULL)
	{
		instance = new HEtiqueta();
	}

	return instance;
}

Etiqueta *HEtiqueta::obtenerEtiqueta(string nombre)
{
	ConcreteIterator<Etiqueta*> *iter = colEtiqueta->getIterator();

	Etiqueta *curr;

	while(iter->hasCurrent())
	{
		curr = iter->current();

		if(curr->getNombre().compare(nombre) == 0)
		{
			return curr;
		}

		iter->next();
	}

	return NULL;
}

void HEtiqueta::crearEtiqueta(EtiquetaDT *etiquetaDT)
{
	colEtiqueta->add(new Etiqueta(etiquetaDT->getNombre()));
}

void HEtiqueta::asociarElementoEtiqueta(ElementoDT *elementoDT, EtiquetaDT *etiquetaDT)
{
	Elemento *elemento = NULL;

	if(elementoDT->tipoElementoDT() == Album::TIPO_ELEMENTO)
	{
		AlbumDT *albumDT = dynamic_cast<AlbumDT*>(elementoDT);

		elemento = HElemento::getInstance()->obtenerAlbum(albumDT->getNombre());
	}
	else if(elementoDT->tipoElementoDT() == Artista::TIPO_ELEMENTO)
	{
		ArtistaDT *artistaDT = dynamic_cast<ArtistaDT*>(elementoDT);

		elemento = HElemento::getInstance()->obtenerArtista(artistaDT->getNombre());
	}
	else if(elementoDT->tipoElementoDT() == Tema::TIPO_ELEMENTO)
	{
		TemaDT *temaDT = dynamic_cast<TemaDT*>(elementoDT);

		elemento = HElemento::getInstance()->obtenerTema(temaDT->getId());
	}

	Etiqueta *etiqueta = obtenerEtiqueta(etiquetaDT->getNombre());

	if(elemento == NULL)
	{
		throw string("El elemento no existe");
	}

	if(etiqueta == NULL)
	{
		throw string("La etiqueta no existe");
	}

	etiqueta->getElementos()->add(elemento);
}

HEtiqueta::~HEtiqueta()
{
}
